#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
const int N = 110;
int g[N][N];
int n, m;
int dx[] = { 1,-1,0,0 };
int dy[] = { 0,0,-1,1 };
int f[N][N];
bool st[N][N];
int dfs(int x, int y) {
    if (f[x][y])return f[x][y];

    f[x][y] = 1;
    for (int i = 0; i < 4; i++) {
        int a = x + dx[i];
        int b = y + dy[i];
        if (a >= 0 && a < n && b >= 0 && b<m && g[a][b]>g[x][y]) {
            f[x][y] = max(f[x][y], dfs(a, b) + 1);
        }
    }
    return f[x][y];
}
int main() {
    cin >> n >> m;

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> g[i][j];
        }
    }
    int ans = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            ans = max(ans, dfs(i, j));
        }
    }
    cout << ans << endl;


    return 0;
}
